package com.hly.musicbackground.model.music.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hly.musicbackground.domain.Song;
import com.hly.musicbackground.model.music.VO.MusicListVO;
import com.hly.musicbackground.model.music.VO.SongDetailVO;
import com.hly.musicbackground.model.music.VO.SongQueryDataVO;
import com.hly.musicbackground.model.music.params.SongQueryParams;

import java.util.List;
import java.util.Set;

public interface SongService extends IService<Song>{

    /**
     * 判断该歌曲是否有MV
     * @param rid 歌曲rid
     * @return boolean true为有MV
     * */
    boolean isMp4(int rid);

    /**
     * 异步保存从酷我音乐获取到的音乐数据
     * @param list 歌曲
     * */
    void SaveList(List<Song> list);

    /**
     * 根据播放量排序分页获取歌曲或者MV
     * @param sortName 排序方式【asc】【desc】
     * @param type 排序类别【mp3】【mp4】
     * @param page 第几页
     * @param limit 一页多少个
     * @return List<Song> 音乐列表
     * */
    List<Song> getSortList(String sortName, String type,int page, int limit);

    /**
     * 获取异常音乐
     * @return List<Song> 音乐列表
     * */
    List<Song> getErrorList();

    /**
     * 将一个音乐标记为异常音乐
     * @param rid 音乐rid
     * */
    void error(int rid);

    /**
     * 将一个音乐的排放量自增
     * @param rid 音乐rid
     * */
    void playMp3NumAutoincrement(int rid);

    /**
     * 将一个MV的排放量自增
     * @param rid 音乐rid
     * */
    void playMp4NumAutoincrement(int rid);

    /**
     * 修改音乐的Status状态
     * @param song 音乐
     * */
    void updateStatus(Song song);

    /**
     * 获取歌单第一个音乐的图片
     * @param songSheetId 歌单id
     * @return String 图片
     * */
    String getSongSheetPic(int songSheetId);

    /**
     * 随机获取音乐，【暂未开发】
     * @param limit
     * @param ids
     * @param max
     * @return List<Song> 音乐列表
     * */
    List<Song> getRandomList(int limit, Set<Integer> ids, int max);

    /**
     * 筛选歌曲列表
     * @param params 参数
     * @return MusicListVO 音乐VO
     * */
    MusicListVO getQueryList(SongQueryParams params);

    List<SongQueryDataVO> songQueryData();

    SongDetailVO getDetail(int rid);
}
